home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1996 July: Mac OS SDK / Dev.CD Jul 96 SDK / Dev.CD Jul 96 SDK1.toast / Development Kits (Disc 1) / OpenDoc / OpenDoc Development / Debugging Support / OpenDoc Source Code / Utilities / Interfaces / TempIter.h < prev    next >
Encoding:
C/C++ Source or Header  |  1996-04-22  |  4.2 KB  |  193 lines  |  [TEXT/MPS ]

  1. /*
  2.     File:        TempIter.h
  3.  
  4.     Contains:    Template utilities for OpenDoc iterators
  5.  
  6.     Owned by:    Jens Alfke
  7.  
  8.     Copyright:    © 1995 by Apple Computer, Inc., all rights reserved.
  9.     
  10.     Theory of Operation:
  11.     
  12.         These are specific TempObj utilities (see the "Temporary Objects"
  13.         tech note) for OpenDoc iterators. They are intended to be used in
  14.         this fashion:
  15.         
  16.             extern void DoSomethingWith( ODFoo* );
  17.             extern void OrSomethingWith( ODFoo* );
  18.             ...
  19.             ODBazz *bazz;
  20.             ...
  21.             for( TempODFooIterator iter(ev,bazz); iter.Current(); iter.Next() ) {
  22.                 DoSomethingWith(iter);
  23.                 OrSomethingWith(iter.Current());
  24.                 // within the loop you can use iter.Current() or just iter
  25.                 // to refer to the current object it's pointing to.
  26.             }
  27.         
  28.         True C++meisters can even do the for loop like this:
  29.         
  30.             for( TempODFooIterator iter(ev,bazz); iter; iter++ )
  31.  
  32.         If you wish you can also call First() to reset the iterator to
  33.         the beginning and return the first element.
  34.             
  35. */
  36.  
  37.  
  38. #ifndef _TEMPITER_
  39. #define _TEMPITER_
  40.  
  41.  
  42. #ifndef _TEMPOBJ_
  43. #include "TempObj.h"
  44. #endif
  45.  
  46. #ifndef SOM_ODWindow_xh
  47. #include <Window.xh>
  48. #endif
  49.  
  50. #ifndef SOM_ODDragAndDrop_xh
  51. #include <DragDrp.xh>
  52. #endif
  53.  
  54.  
  55. struct Environment;
  56. class ODFrame;
  57. class ODFacet;
  58. class ODFocusSet;
  59. class ODTypeList;
  60.  
  61.  
  62. class TempODFacetIterator :public BaseTempObj
  63. {
  64.     public:
  65.     TempODFacetIterator( Environment*, ODFacet*, ODTraversalType, ODSiblingOrder );
  66.     ODFacet*    First( );
  67.     ODFacet*    Current( )                {return fCurrent;}
  68.     ODFacet*    Next( );
  69.     ODBoolean    IsNotComplete( );
  70.                 operator ODFacet*()        {return fCurrent;}
  71.     ODFacet*    operator ->()            {return fCurrent;}
  72.     ODFacet*    operator ++()            {return this->Next();}
  73.     
  74.     private:
  75.     Environment* fEv;
  76.     ODFacet*     fCurrent;
  77. };
  78.  
  79.  
  80. class TempODFrameFacetIterator :public BaseTempObj
  81. {
  82.     public:
  83.     TempODFrameFacetIterator( Environment*, ODFrame* );
  84.     ODFacet*    First( );
  85.     ODFacet*    Current( )                {return fCurrent;}
  86.     ODFacet*    Next( );
  87.     ODBoolean    IsNotComplete( );
  88.                 operator ODFacet*()        {return fCurrent;}
  89.     ODFacet*    operator ->()            {return fCurrent;}
  90.     ODFacet*    operator ++()            {return this->Next();}
  91.     
  92.     private:
  93.     Environment* fEv;
  94.     ODFacet*     fCurrent;
  95. };
  96.  
  97.  
  98. class TempODEmbeddedFramesIterator :public BaseTempObj
  99. {
  100.     public:
  101.     TempODEmbeddedFramesIterator( Environment*, ODPart*, ODFrame* );
  102.     ODFrame*    First( );
  103.     ODFrame*    Current( )                {return fCurrent;}
  104.     ODFrame*    Next( );
  105.     ODBoolean    IsNotComplete( );
  106.                 operator ODFrame*()        {return fCurrent;}
  107.     ODFrame*    operator ->()            {return fCurrent;}
  108.     ODFrame*    operator ++()            {return this->Next();}
  109.     
  110.     private:
  111.     Environment* fEv;
  112.     ODFrame*     fCurrent;
  113. };
  114.  
  115.  
  116. class TempODWindowIterator :public BaseTempObj
  117. {
  118.     public:
  119.     TempODWindowIterator( Environment*, ODWindowState* );
  120.     ODWindow*    First( );
  121.     ODWindow*    Current( )                {return fCurrent;}
  122.     ODWindow*    Next( );
  123.     ODBoolean    IsNotComplete( );
  124.                 operator ODWindow*()    {return fCurrent;}
  125.     ODWindow*    operator ->()            {return fCurrent;}
  126.     ODWindow*    operator ++()            {return this->Next();}
  127.     
  128.     private:
  129.     Environment* fEv;
  130.     ODWindow*     fCurrent;
  131. };
  132.  
  133.  
  134. class TempODFocusSetIterator :public BaseTempObj
  135. {
  136.     public:
  137.     TempODFocusSetIterator( Environment*, ODFocusSet* );
  138.     ODTypeToken    First( );
  139.     ODTypeToken    Current( )                {return fCurrent;}
  140.     ODTypeToken    Next( );
  141.     ODBoolean    IsNotComplete( );
  142.  
  143.                 operator ODTypeToken()    {return fCurrent;}
  144.     ODTypeToken    operator ++()            {return this->Next();}
  145.     
  146.     private:
  147.     Environment* fEv;
  148.     ODTypeToken     fCurrent;
  149. };
  150.  
  151.  
  152. class TempODTypeListIterator :public BaseTempObj
  153. {
  154.     public:
  155.     TempODTypeListIterator( Environment*, ODTypeList* );
  156.     ~TempODTypeListIterator( );
  157.     ODType        First( );
  158.     ODType        Current( )                {return fCurrent;}
  159.     ODType        Next( );
  160.     ODBoolean    IsNotComplete( );
  161.                 operator ODType()        {return fCurrent;}
  162.     ODType        operator++()            {return this->Next();}
  163.     
  164.     private:
  165.     Environment* fEv;
  166.     ODType         fCurrent;
  167. };
  168.  
  169.  
  170. #ifdef _OD_IMPL_
  171.  
  172. class TempODDragItemIterator :public BaseTempObj
  173. {
  174.     public:
  175.     TempODDragItemIterator( Environment*, ODDragAndDrop* );
  176.     ODStorageUnit* First( );
  177.     ODStorageUnit* Current( )                {return fCurrent;}
  178.     ODStorageUnit* Next( );
  179.     ODBoolean    IsNotComplete( );
  180.                 operator ODStorageUnit*()    {return fCurrent;}
  181.     ODStorageUnit* operator ->()            {return fCurrent;}
  182.     ODStorageUnit* operator ++()            {return this->Next();}
  183.     
  184.     private:
  185.     Environment* fEv;
  186.     ODStorageUnit* fCurrent;
  187. };
  188.  
  189. #endif /*_OD_IMPL_*/
  190.  
  191.  
  192. #endif /*_TEMPITER_*/
  193.